/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataTier;

import EntitiesTier.ClEmpresa;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Douglas
 */
public class EmpresaDAO {
    private Connection conn;
    
    public EmpresaDAO() throws Exception{
        
        try{
            this.conn = ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new Exception (e.getMessage());
        }
    }
    
    public int incluir(ClEmpresa clEmpresa) throws Exception{
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        if(clEmpresa == null)
            throw new Exception("O valor passado não pode ser nulo");
        
        try{
            String SQL = "INSERT INTO EMPRESA(EMP_NOME, EMP_RAZAO, EMP_CNPJ, EMP_IE, EMP_ENDERECO, EMP_NUM, "
                    + "EMP_COMPLEMENTO, EMP_BAIRRO, EMP_CDIBGE, EMP_CEP, EMP_FONE1, EMP_FONE2, EMP_FAX, "
                    + "EMP_SLOGAN, EMP_INFOADIC, EMP_WEB, EMP_EMAIL, EMP_PORTA, EMP_SMTP, EMP_SENHA ) "
                    + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setString(1, clEmpresa.getEMP_NOME());
            ps.setString(2, clEmpresa.getEMP_RAZAO());
            ps.setString(3, clEmpresa.getEMP_CNPJ());
            ps.setString(4, clEmpresa.getEMP_IE());
            ps.setString(5, clEmpresa.getEMP_ENDERECO());
            ps.setString(6, clEmpresa.getEMP_NUM());            
            ps.setString(7, clEmpresa.getEMP_COMPLEMENTO());
            ps.setString(8, clEmpresa.getEMP_BAIRRO());
            ps.setString(9, clEmpresa.getEMP_CDIBGE());
            ps.setString(10, clEmpresa.getEMP_CEP());
            ps.setString(11, clEmpresa.getEMP_FONE1());
            ps.setString(12, clEmpresa.getEMP_FONE2());
            ps.setString(13, clEmpresa.getEMP_FAX());
            ps.setString(14, clEmpresa.getEMP_SLOGAN());
            ps.setString(15, clEmpresa.getEMP_INFOADIC());
            ps.setString(16, clEmpresa.getEMP_WEB());
            ps.setString(17, clEmpresa.getEMP_EMAIL());
            ps.setInt(18, clEmpresa.getEMP_PORTA());
            ps.setString(19, clEmpresa.getEMP_SMTP());
            ps.setString(20, clEmpresa.getEMP_SENHA());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            if(rs.next())
            { 
                clEmpresa.setEMP_COD(rs.getInt(1));
            }
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
            return( clEmpresa.getEMP_COD() );
        }
    }
        public void atualizar(ClEmpresa clEmpresa) throws Exception{
        
        PreparedStatement ps = null;
        Connection conn = null;

        if(clEmpresa == null)
            throw new Exception("O valor passado não pode ser nulo");

        try
        {
            String SQL = "UPDATE EMPRESA SET EMP_NOME = ?, EMP_RAZAO = ?, EMP_CNPJ = ?, EMP_IE = ?, " 
                    + " EMP_ENDERECO = ?, EMP_NUM = ?, EMP_COMPLEMENTO = ?, EMP_BAIRRO = ?, "
                    + " EMP_CDIBGE = ?, EMP_CEP = ?, EMP_FONE1 = ?, EMP_FONE2 = ?, EMP_FAX = ?, "
                    + " EMP_SLOGAN = ?, EMP_INFOADIC = ?, EMP_WEB = ?, EMP_EMAIL = ?, EMP_PORTA = ?, EMP_SMTP = ?, EMP_SENHA = ? WHERE EMP_COD = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
             ps.setString(1, clEmpresa.getEMP_NOME());
            ps.setString(2, clEmpresa.getEMP_RAZAO());
            ps.setString(3, clEmpresa.getEMP_CNPJ());
            ps.setString(4, clEmpresa.getEMP_IE());
            ps.setString(5, clEmpresa.getEMP_ENDERECO());
            ps.setString(6, clEmpresa.getEMP_NUM());            
            ps.setString(7, clEmpresa.getEMP_COMPLEMENTO());
            ps.setString(8, clEmpresa.getEMP_BAIRRO());
            ps.setString(9, clEmpresa.getEMP_CDIBGE());
            ps.setString(10, clEmpresa.getEMP_CEP());
            ps.setString(11, clEmpresa.getEMP_FONE1());
            ps.setString(12, clEmpresa.getEMP_FONE2());
            ps.setString(13, clEmpresa.getEMP_FAX());
            ps.setString(14, clEmpresa.getEMP_SLOGAN());
            ps.setString(15, clEmpresa.getEMP_INFOADIC());
            ps.setString(16, clEmpresa.getEMP_WEB());
            ps.setString(17, clEmpresa.getEMP_EMAIL());
            ps.setInt(18, clEmpresa.getEMP_PORTA());
            ps.setString(19, clEmpresa.getEMP_SMTP());
            ps.setString(20, clEmpresa.getEMP_SENHA());
            ps.setInt(21, clEmpresa.getEMP_COD());
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
        
    }
        public List todos() throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM EMPRESA e left outer join tb_ibge on cd_ibge = emp_cdibge");
            rs = ps.executeQuery();
            List<ClEmpresa> lista = new ArrayList<ClEmpresa>();
            while(rs.next())
            {
                int emp_cod = rs.getInt("EMP_COD");
                String emp_nome = rs.getString("EMP_NOME");
                String emp_razao = rs.getString("EMP_RAZAO");
                String emp_cnpj = rs.getString("EMP_CNPJ");
                String emp_ie = rs.getString("EMP_IE");
                String emp_endereco = rs.getString("EMP_ENDERECO"); 
                String emp_num = rs.getString("EMP_NUM");
                String emp_complemento = rs.getString("EMP_COMPLEMENTO");
                String emp_bairro = rs.getString("EMP_BAIRRO");
                String emp_cidade = rs.getString("NM_LOCALIDADE");
                String emp_cdibge = rs.getString("EMP_CDIBGE"); 
                String emp_uf = rs.getString("CD_UF");
                String emp_cep = rs.getString("EMP_CEP");
                String emp_fone1 = rs.getString("EMP_FONE1");
                String emp_fone2 = rs.getString("EMP_FONE2");
                String emp_fax = rs.getString("EMP_FAX");
                String emp_slogan = rs.getString("EMP_SLOGAN");
                String emp_infadic = rs.getString("EMP_INFOADIC"); 
                String emp_web = rs.getString("EMP_WEB");
                String emp_email = rs.getString("EMP_EMAIL");
                int emp_porta = rs.getInt("EMP_PORTA");
                String emp_smtp = rs.getString("EMP_SMTP");
                String emp_senha = rs.getString("EMP_SENHA");

                ClEmpresa clEmpresa = new ClEmpresa(emp_cod, emp_nome, emp_razao, emp_cnpj, emp_ie, emp_endereco, emp_num, emp_complemento, emp_bairro, emp_cidade, emp_cdibge, emp_uf , emp_cep, emp_fone1, 
                emp_fone2, emp_fax, emp_slogan, emp_infadic, emp_web, emp_email, emp_porta, emp_smtp, emp_senha);

                lista.add(clEmpresa);
            }
            return lista;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
         public ClEmpresa procurar(int emp_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM EMPRESA left outer join tb_ibge on cd_ibge = emp_cdibge WHERE EMP_COD = ?");
            ps.setInt(1, emp_cod);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o ID: " + emp_cod);
            }
            String emp_nome = rs.getString("EMP_NOME");
            String emp_razao = rs.getString("EMP_RAZAO");
            String emp_cnpj = rs.getString("EMP_CNPJ");
            String emp_ie = rs.getString("EMP_IE");
            String emp_endereco = rs.getString("EMP_ENDERECO"); 
            String emp_num = rs.getString("EMP_NUM");
            String emp_complemento = rs.getString("EMP_COMPLEMENTO");
            String emp_bairro = rs.getString("EMP_BAIRRO");
            String emp_cidade = rs.getString("NM_LOCALIDADE");
            String emp_cdibge = rs.getString("EMP_CDIBGE"); 
            String emp_uf = rs.getString("CD_UF");
            String emp_cep = rs.getString("EMP_CEP");
            String emp_fone1 = rs.getString("EMP_FONE1");
            String emp_fone2 = rs.getString("EMP_FONE2");
            String emp_fax = rs.getString("EMP_FAX");
            String emp_slogan = rs.getString("EMP_SLOGAN");
            String emp_infadic = rs.getString("EMP_INFOADIC"); 
            String emp_web = rs.getString("EMP_WEB");
            String emp_email = rs.getString("EMP_EMAIL");
            int emp_porta = rs.getInt("EMP_PORTA");
            String emp_smtp = rs.getString("EMP_SMTP");
            String emp_senha = rs.getString("EMP_SENHA");
            
            
            ClEmpresa clEmpresa = new ClEmpresa(emp_cod, emp_nome, emp_razao, emp_cnpj, emp_ie, emp_endereco, emp_num, emp_complemento, emp_bairro, emp_cidade, emp_cdibge, emp_uf , emp_cep, emp_fone1, 
                emp_fone2, emp_fax, emp_slogan, emp_infadic, emp_web, emp_email, emp_porta, emp_smtp, emp_senha);

            return clEmpresa;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
         public void excluir(int emp_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(emp_cod == 0)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM EMPRESA WHERE EMP_COD = ?");
            ps.setInt(1, emp_cod);
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    public ClEmpresa procurar(String emp_nome) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM EMPRESA left outer join tb_ibge on cd_ibge = emp_cdibge WHERE EMP_COD = ?");
            ps.setString(1, emp_nome);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o nome: " + emp_nome);
            }

                int emp_cod = rs.getInt("EMP_COD");
                String emp_razao = rs.getString("EMP_RAZAO");
                String emp_cnpj = rs.getString("EMP_CNPJ");
                String emp_ie = rs.getString("EMP_IE");
                String emp_endereco = rs.getString("EMP_ENDERECO"); 
                String emp_num = rs.getString("EMP_NUM");
                String emp_complemento = rs.getString("EMP_COMPLEMENTO");
                String emp_bairro = rs.getString("EMP_BAIRRO");
                String emp_cidade = rs.getString("NM_LOCALIDADE");
                String emp_cdibge = rs.getString("EMP_CDIBGE"); 
                String emp_uf = rs.getString("CD_UF");
                String emp_cep = rs.getString("EMP_CEP");
                String emp_fone1 = rs.getString("EMP_FONE1");
                String emp_fone2 = rs.getString("EMP_FONE2");
                String emp_fax = rs.getString("EMP_FAX");
                String emp_slogan = rs.getString("EMP_SLOGAN");
                String emp_infadic = rs.getString("EMP_INFOADIC"); 
                String emp_web = rs.getString("EMP_WEB");
                String emp_email = rs.getString("EMP_EMAIL");
                int emp_porta = rs.getInt("EMP_PORTA");
                String emp_smtp = rs.getString("EMP_SMTP");
                String emp_senha = rs.getString("EMP_SENHA");

            ClEmpresa clEmpresa = new ClEmpresa(emp_cod, emp_nome, emp_razao, emp_cnpj, emp_ie, emp_endereco, emp_num, emp_complemento, emp_bairro, emp_cidade, emp_cdibge, emp_uf , emp_cep, emp_fone1, 
                emp_fone2, emp_fax, emp_slogan, emp_infadic, emp_web, emp_email, emp_porta, emp_smtp, emp_senha);

            return clEmpresa;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
}
